package com.batdream.message.controller;

import com.batdream.message.pojo.Users;
import com.batdream.message.pojo.vo.FriendRequestVo;
import com.batdream.message.service.UserService;
import com.batdream.message.utils.JSONResult;
import lombok.extern.java.Log;
import lombok.extern.log4j.Log4j;
import lombok.extern.log4j.Log4j2;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import javax.annotation.PostConstruct;
import java.util.List;

/**
 * @author Wang Chen Peng
 * @date 2018/12/24
 * describe:
 */

@Log4j2
@RestController
@RequestMapping("/user")
public class UserController {

    private final UserService userService;

    @Autowired
    public UserController(UserService userService) {
        this.userService = userService;
    }

    /**
     * 登录注册共用接口
     * @param users 用户信息
     * @return
     */
    @PostMapping("/login")
    public JSONResult login(@RequestBody Users users){
        try {
            log.debug("传入参数 : {}", users);
            //用户名密码
            if (StringUtils.isEmpty(users.getUsername())||StringUtils.isEmpty(users.getPassword())){
                log.debug("用户名或密码为空 请求参数 : {}",users);
                return JSONResult.errorMsg("用户名或密码不能为空");
            }
            //用户名是否存在
            boolean userIsExist = userService.queryUsername(users.getUsername());

            //存在则登录 不存在则注册
            if (userIsExist){
                log.debug("用户存在 进行登录");
                JSONResult login = userService.login(users);
                log.debug("用户登录结果 ",login );
                return login;
            }else{
                log.debug("用户不存在 进行注册",users );
                JSONResult register = userService.register(users);
                log.debug("用户注册成功 返回值为 : {}",register.toString() );
                return register;
            }
        } catch (Exception e) {
            log.debug("出现异常 异常信息为 : {}",e.getMessage() );
            return JSONResult.errorException(e.getMessage());
        }
    }

    /**
     * 修改用户昵称
     * @param users id 昵称
     * @return 返回
     */
    @PostMapping("/updateNickName")
    public JSONResult updateNickName(@RequestBody Users users){
        return userService.updateNickName(users);
    }

    /**
     * 搜索好友 根据账号做匹配查询而不是模糊查询
     * @param myUserId 用户id
     * @param friendUserName 朋友用户名
     * @return 返回
     */
    @PostMapping("/search")
    public JSONResult searchUser(  String myUserId, String friendUserName){
        if (StringUtils.isBlank(myUserId)){
            return JSONResult.errorMsg("用户id不能为空");
        }
        if (StringUtils.isBlank(friendUserName)){
            return JSONResult.errorMsg("搜索的用户名不能为空");
        }
        return userService.searchUser(myUserId,friendUserName);
    }

    /**
     * 搜索好友 根据账号做匹配查询而不是模糊查询
     * @param myUserId 用户id
     * @param friendId 朋友用户id
     * @return 返回
     */
    @PostMapping("/scanQrCodeSearchUserById")
    public JSONResult scanQrCodeSearchUserById(  String myUserId, String friendId){
        if (StringUtils.isBlank(myUserId)){
            return JSONResult.errorMsg("用户id不能为空");
        }
        if (StringUtils.isBlank(friendId)){
            return JSONResult.errorMsg("搜索的用户Id不能为空");
        }
        return userService.scanQrCodeSearchUserById(myUserId,friendId);
    }

    /**
     * 发送添加好友请求
     * @param myUserId 用户id
     * @param friendId 朋友的id
     * @return 返回
     */
    @PostMapping("/addFirend")
    public JSONResult addFirend(  String myUserId, String friendId){
        if (StringUtils.isBlank(myUserId)){
            return JSONResult.errorMsg("用户id不能为空");
        }
        if (StringUtils.isBlank(friendId)){
            return JSONResult.errorMsg("被添加用户id不能为空");
        }
        return userService.addFirend(myUserId,friendId);
    }

    /**
     * 根据用户id获取所有好友请求
     * @param acceptUserId 用户id
     * @return 好友请求发送方的信息 list
     */
    @PostMapping("/getFriendRequest")
    public JSONResult getFriendRequest(String acceptUserId){
        try {
            List<FriendRequestVo> voList = userService.queryFriendRequestList(acceptUserId);
            return JSONResult.ok(voList);
        } catch (Exception e) {
            return JSONResult.errorMsg(e.getMessage());
        }

    }


}
